<?php
/**
 * Получить id группы по коду и модулю
 */
function access_get_groupid($code=null,$mod=null)
{
    $Processor = mst_getdatemod('access','Processor');
    $obj = $Processor->query('sc_getObj_groups');
    $obj->set('plain',$code,'code');
    $obj->set('plain',$mod,'mod');
    $id = $Processor->query('getGroupId',$obj);
    if (sharpobj_iserror($id ))
    {
        // Ошибка
        mst_error('Ошибка sharpobj',"Процессор вернул ошибку {$id->getP('code')} {$id->getP('name')} {$id->getP('about')}",1);
        return false;
    }
    return $id;
}

/**
 * Получить разрешения для объекта в виде массива
 */
function access_get_permission($subj_type,$subj_id,$item_type,$item_id)
{
    $Processor = mst_getdatemod('access','Processor');
    $obj = $Processor->query('sc_getObj_permissions');    
    $obj->set('plain',$subj_type,'subj_type');
    $obj->set('plain',$subj_id,'subj_id');
    $obj->set('plain',$item_type,'item_type');
    $obj->set('plain',$item_id,'item_id');
    
    $obj = $Processor->query('getPermission',$obj);
    if (!$obj)
    {    // Права для объекта в базе не найдены. Возвращаем пустой массив
        $obj = $Processor->query('sc_getObj_permissions');
    }
    if (sharpobj_iserror($obj))
    {
        // Ошибка
        mst_error('Ошибка sharpobj',"Процессор вернул ошибку {$obj->get('plain','code')} {$obj->get('plain','name')} {$obj->get('plain','about')}",1);
        $obj = $Processor->query('sc_getObj_permissions');
    }
        
    // Устанавливаем права доступа в объекте
    $all_permissions = access_const_permissions();
    $result = array();
    foreach ($all_permissions as $perm_name)
    {
        if ($obj->getP($perm_name)===1)
        {
            $result[$perm_name] = 1;
        }else{
            $result[$perm_name] = 0;
        }
    }
    return $result;
}

/**
 * Получить id роли по коду и модулю
 */
function access_get_roleid($code=null,$mod=null)
{
    $Processor = mst_getdatemod('access','Processor');
    $obj = $Processor->query('sc_getObj_roles');
    $obj->set('plain',$code,'code');
    $obj->set('plain',$mod,'mod');
    $id = $Processor->query('getRoleId',$obj);
    if (!$id OR sharpobj_iserror($id ))
    {
        // Ошибка
        mst_error('Ошибка sharpobj',"Процессор вернул ошибку {$id->getP('code')} {$id->getP('name')} {$id->getP('about')}",1);
        return false;
    }
    return $id;
}

function access_get_userroles($usr_id,$mod)
{
    $Processor = mst_getdatemod('access','Processor');
    $obj = new access_data_permission();
	$obj->dsetUser($usr_id);
	$obj->dsetNamedObj($mod,null);
    $list = $Processor->query('listUserRoles',$obj);
    $result = array();
    foreach ($list as $row)
    {
        $result[$row->getP('code')] = $row->getP('name');
    }
    return $result;
}

?>